package com.qingcheng.controller;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.qingcheng.handler.ConstantPropertiesUtil;
import com.qingcheng.util.YouthR;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiOperation;
import org.joda.time.DateTime;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/**
 * @ClassName FileUpdateController
 * @Description 上传文件到阿里云的oss(云存储服务)
 * @Author Simon
 * @Date 2020/5/25 19:53
 * @Version 1.0
 **/
@ApiModel(description="阿里云文件管理")
@RestController
@RequestMapping("/youthOrange/uploadOss")
public class FileUpdateController {

    //上传讲师头像的方法
    @ApiOperation(value = "上传讲师头像的方法")
    @PostMapping("/upload")
    public YouthR uploadTeacherImg(@RequestParam("file") MultipartFile file,
                                   @RequestParam(value = "host",required = false) String host){
        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = ConstantPropertiesUtil.END_POINT;
        // 云账号AccessKey有所有API访问权限，建议遵循阿里云安全最佳实践，创建并使用RAM子账号进行API访问或日常运维，请登录 https://ram.console.aliyun.com 创建。
        String accessKeyId = ConstantPropertiesUtil.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtil.ACCESS_KEY_SECRET;
        String yourBucketName = ConstantPropertiesUtil.BUCKET_NAME;
        // 一级目录
        String host1 = null;

        try {
            // 文件名 拼接不重复的去添加
            String originalFilename = UUID.randomUUID().toString()+file.getOriginalFilename();
            // 输入流
            InputStream inputStream = file.getInputStream();
            // 存储到oss
            // 创建OSSClient实例。
            // 获取当前日期 yyyy/MM/dd
            String fileName = new DateTime().toString("yyyy/MM/dd");
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            // 如果上传参数带来了val则是头像的
            if(!StringUtils.isEmpty(host)){
                host1 = host;
            }
            ossClient.putObject(yourBucketName, fileName+"/"+host1+"/"+originalFilename, inputStream);
            // 关闭OSSClient。
            ossClient.shutdown();
            // 上传  之后oss的路径
            String path = "http://"+yourBucketName+"."+endpoint+"/"+fileName+"/"+host1+"/"+originalFilename;
            return  YouthR.ok().data("imgUrl",path);
        } catch (IOException e) {
            e.printStackTrace();
            return YouthR.error();
        }
    }
}
